今天意外需要早點上來解每日任務,因為晚上要看半澤先發就可以專心看了(X
昨天我們有稍微提到@extend,今天我們用一些範例來探討一下使用方式
編譯前
.error {
  border: 1px #f00;
  background-color: #fdd;
  &--serious {
    @extend .error;
    border-width: 3px;
  }
}
編譯後
.error, .error--serious {
  border: 1px #f00;
  background-color: #fdd;
}
.error--serious {
  border-width: 3px;
}
這個就是一個很基本@extend範例,共用繼承的樣式位置會往前提升, 繼承同一個 css 的 class,編譯出的內容會放在一起。
!optional的用法
.notice {
    color: #F00;
    font-size: 16px;
}
.important {
    @extend .notice2 !optional;
}
加上「!optional」修飾詞,表示當extend不存在樣式名稱時,則不做編譯,是很神奇看了官網介紹才知道這個東西作法,如果我們去做@extend,萬一沒有這個屬性,直接編譯這樣會產生錯誤的,這時候我們可以透過!optional,讓他不會沒有存在樣式,不會爆錯也可以編譯
編譯前
@media screen and (max-width: 600px) {
  .error--serious {
    @extend .error;
  }
}
.error {
  border: 1px #f00;
  background-color: #fdd;
}
@media範圍裡面使用@extend 呼叫指定樣式名稱時,該樣式不能放在@media 範圍之外,否則會出錯,@media 範圍裡面才行,這個基本上這樣設定是蠻合理方式,主要是我們的@extend會把共用拿出去外面做完使用,而這樣拉去出去外層,有可能導致我們不了解原始的斷點是設定在哪個位置,上述是推測因為這樣原因,所以不能使用在斷點裡面,如果要用必須要全部設定斷點裡面就不會有這樣的問題
後面還有他跟mixin的愛恨情仇,等到後面主角(mixin)出現我們再來解釋吧